package com.bicon.botu.mall.order.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.bicon.botu.mall.order.dto.*;
import com.bicon.botu.mall.order.entity.OrderGoods;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 李双喜
 * @date 2018/5/14 13:43
 */
public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {

    /**
     * 我的订单模块 根据搜索框内容或状态分页查询订单Id
     * @param page
     * @param userId
     * @param payState
     * @param condition
     * @return
     */
    List<String> getPageByPayCondition(Pagination page, @Param("userId") String userId,
                                              @Param("payState") Integer payState, @Param("condition") String condition);

    /**
     * 我的订单模块 查询所有的订单详情
     * @param userId
     * @param payState
     * @param condition
     * @param ids
     * @return
     */
    List<OrderGoodsDto> selectListByPayCondition(@Param("userId") String userId,
                                              @Param("payState") Integer payState, @Param("condition") String condition, @Param("ids") List<String> ids);

    /**
     * 多条件查询订单列表
     * @param page
     * @param paramMap
     * @return
     */
    List<OrderGoodsAndAddressDto> getOrderPageByCondition(Pagination page,@Param("paramMap") Map<String,String> paramMap);

    /**
     * 根据商家ID 统计订单总数、待付款、待收货等状态对应数量
     * @param storeId
     * @param payStateArray
     * @return
     */
    public List<TotalPriceDTO> getOrderTotalByStoreId(@Param("storeId") String storeId,
                                                      @Param("payStateArray") List<String> payStateArray);

    /**
     * 根据商家ID 统计提醒订单总数、待付款、待收货等状态对应数量
     * @param storeId
     * @param payStateArray
     * @return
     */
    public List<TotalPriceDTO> getWarnOrderTotalByStoreId(@Param("storeId") String storeId,
                                                      @Param("payStateArray") List<String> payStateArray);



    /**
     * 根据订单ID集合 查询订单及地址组全对象
     * @param orderGoodsIds 订单ID集合
     * @return
     */
    public List<BatchDeliverGoodsDTO> getOrderGoodsAndAddressByIds( @Param("orderGoodsIds") List<String> orderGoodsIds);
    /**
     * 多条件查询订单列表(不分页)
     * @param params            过滤条件
     * @param sortType          排序字段
     * @param sortDirection     排序方式
     * @return
     */
    List<OrderExportDto> getOrderByCondition(@Param("params") Map<String, String> params,@Param("sortType") String sortType,@Param("sortDirection") String sortDirection);

    /**
     * 统计顾客支付数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> customersStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 定时取消订单状态
     * @param params   条件
     */
    int updatePayState(Map<String, Object> params);

    /**
     * 已完成支付的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> paidStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 交易成功的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> doneOrderStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime);


    /**
     * 已完成支付的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> paidMoneyStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 交易成功的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> doneOrderMoneyStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime);



}
